using UnityEngine;
using UnityEngine.SceneManagement;

public abstract class GameObjectFactory : ScriptableObject
{
    Scene scene;

    //基类模板方法
    protected T CreateGameObjectInstance<T> (T prefab) where T : MonoBehaviour
    {
        //SceneManager 运行时的场景管理
        //在编辑器中，先检查场景是否存在，然后再创建它，以防我们在热重载期间失去对场景的跟踪。
        if(!scene.isLoaded)
        {//场景未加载
            if(Application.isEditor)
            {//编辑模式
                scene  = SceneManager.GetSceneByName(name);//搜索已加载的场景，查找包含给定名称的场景。
                if(!scene.isLoaded)
                {
                    scene = SceneManager.CreateScene(name);//创建场景
                }
            }else{
                scene = SceneManager.CreateScene(name);
            }
        }

        T instance = Instantiate(prefab);
        SceneManager.MoveGameObjectToScene(instance.gameObject, scene);//将游戏对象从当前场景移至新的场景
        return instance;

    }


}